package com.negotium.dominio.dao.impl;

import java.util.Date;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.negotium.dominio.Concepto;
import com.negotium.dominio.Usuario;
import com.negotium.dominio.dao.ConceptoDAO;

public class ConceptoDAOImpl extends BusinessObjectDAOImpl<Concepto> implements ConceptoDAO {

	/**
	 * @see ConceptoDAO#findByUsuario(Usuario)
	 */
	public List<Concepto> findByUsuario(Usuario usuario) {
		DetachedCriteria criteria = this.getDetachedCriteria().add(Restrictions.eq("usuario", usuario));
		criteria.addOrder(Order.desc("fecha"));
		return this.executeCriteria(criteria);
	}

	/**
	 * @see ConceptoDAO#findBetweenFechas(Usuario, Date, Date)
	 */
	public List<Concepto> findBetweenFechas(Usuario usuario, Date fechaDesde, Date fechaHasta) {
		DetachedCriteria criteria = this.getDetachedCriteria();
		criteria.add(Restrictions.ge("fecha", fechaDesde));
		criteria.add(Restrictions.le("fecha", fechaHasta));
		criteria.add(Restrictions.eq("usuario", usuario));
		criteria.addOrder(Order.asc("id"));
		return this.executeCriteria(criteria);
	}

	/**
	 * @see ConceptoDAO#findByFecha(Usuario, Date)
	 */
	public List<Concepto> findByFecha(Usuario usuario, Date fecha) {
		return this.findBetweenFechas(usuario, fecha, fecha);
	}

}
